/* 
 * File:   main.cpp
 * Author: Pedro
 *
 * Created on 9 de Agosto de 2010, 08:18
 */

#include <cstdlib>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include "PontoHeader/Ponto.h"
#include "Classe/Arquivo.h"
#include "Classe/Lista.h"
#include "Classe/TabelaHash.h"
#include "Classe/Lexema.h"
#include "funcoes.h"

using namespace std;
using namespace Texto;
/*
 * 
 */
int main(int argc, char** argv) {
     
    bool erro = false;
    Arquivo *arquivo;

    if (argc <= 1){

        cout << "Faltam Argumentos!";
        return 0;
    }else{

      arquivo = new Arquivo(argv[1]);

    }


    TabelaHash *tabela = new TabelaHash();

    FuncoesEstaticas::preenchePalavrasReservadas(&tabela);
    
    //tabela->ExibeTabela();
 
    arquivo->AbrirArquivo();

    Lexema *teste;

    teste = arquivo->RetornaProximoLexema();
 
        if(!teste->ValidaLexema()){

            cout << "Erro!: linha " << Arquivo::NumLinha << " : " << (*teste) << " não reconhecido!";
            erro = true;
        }else{

            Campo insere;

            insere.lexema = *teste;
            insere.token = teste->RetornaToken();
            insere.identificador = TabelaHash::Hash(insere.lexema);

            if(!tabela->existeNaTabela(insere.lexema))
                *tabela << insere;

        }
    delete teste;

   while(!arquivo->fimDoArquivo() && !erro){
    
        teste = arquivo->RetornaProximoLexema();
        if(!teste->ValidaLexema()){

            cout << "Erro!: linha " << Arquivo::NumLinha << " : " << (*teste) << " não reconhecido!";
            erro = true;
            break;
        }else{
            Campo insere;

            insere.lexema = *teste;
            insere.token = teste->RetornaToken();
            insere.identificador = TabelaHash::Hash(insere.lexema);

            if(!tabela->existeNaTabela(insere.lexema))
                *tabela << insere;
        }

        delete teste;
    }
  //  tabela->ExibeTabela();

    if(!erro)
        cout << "Arquivo validado sem erros! \n";

    return 0;

}

